<?php
/**
 *	database.class.php 数据库操作类
 *
 *	将数据库操作全部定义在此类中
 */

class database {
	
	/**
	 *	将数据库信息定义为protected
	 *	起到保护信息的作用
	 *	防止外部更改数据库连接信息
	 */
	protected $db_host = 'localhost'; 
	
	protected $db_user = 'root';
	
	protected $db_password = 'root';
	
	protected $db_database = 'office';

	public $link_db = null; //数据库连接

	public $result = null; // 查询结果


	
	/**
	 *	构造函数
	 *
	 *	调用此类时自动连接数据库
	 */
	public function __construct() {

		 $this->link_db = mysql_connect($this->db_host,$this->db_user,$this->db_password); //连接数据库

		 if($this->link_db) {
			 mysql_select_db($this->db_database);
		 }
		 else {
			echo '无法连接数据库';
			return false;
		 }
	 }

	/**
	 * 直接执行sql查询
	 * @param $sql
	 * $return boolean/query resource  如果为查询语句，返回资源句柄，否则返回true/false
	 */
	public function query($sql) {
		$this->result = mysql_query($sql);
		return $this->result;
	}

	/**
	 * 查看执行sql语句后影响的行数
	 * @return 返回影响的行数
	 */
	 public function affected_rows() {
		$rows = mysql_affected_rows();
		return $rows;
	 }

	/**
	 * 遍历查询结果集assoc
	 * @param $type			返回结果集类型
	 *
	 * @return array
	 */
	public function fetch($type='mysql_fetch_assoc') {
		$res = $type($this->result);
		if(!$res) {
			$this->free_result();
		}
		return $res;
	}

	/**
	 * 遍历查询结果集row
	 * @param $type			返回结果集类型
	 *
	 * @return array
	 */
	public function fetch_row($type='mysql_fetch_row') {
		$res = $type($this->result);
		if(!$res) {
			$this->free_result();
		}
		return $res;
	}

	/**
	 * 释放查询资源
	 * @return void
	 */
	public function free_result() {
		if(is_resource($this->result)) {
			mysql_free_result($this->result);
			$this->result = null;
		}
	}

	/**
	 * 执行sql查询
	 * @param $data 		需要查询的字段值[例`name`,`gender`,`birthday`]
	 * @param $table 		数据表
	 * @param $where 		查询条件[例`name`='$name']
	 * @param $limit 		返回结果范围[例：10或10,10 默认为空]
	 * @param $order 		排序方式	[默认按数据库默认方式排序]
	 * @param $group 		分组方式	[默认为空]
	 * @param $key 			返回数组按键名排序
	 * @return array		查询结果集数组
	 */
	public function select($data, $table, $where = '', $limit = '', $order = '', $group = '', $key = '') {
		$where = $where == '' ? '' : ' WHERE '.$where;
		$order = $order == '' ? '' : ' ORDER BY '.$order;
		$group = $group == '' ? '' : ' GROUP BY '.$group;
		$limit = $limit == '' ? '' : ' LIMIT '.$limit;
		
		$sql = 'SELECT '.$data.' FROM '.$table.$where.$order.$group.$limit;
		$this->query($sql);

		$datalist = array();
		while(($rs = $this->fetch()) != false) {
			if($key)
				$datalist[$rs[$key]] = $rs;
			else
				$datalist[] = $rs;
		}
		$this->free_result();
		return $datalist;
	}

	/**
	 * 获取单条记录查询
	 * @param $data 		需要查询的字段值[例`name`,`gender`,`birthday`]
	 * @param $table 		数据表
	 * @param $where 		查询条件
	 * @param $limit        限制条件
	 * @param $order 		排序方式	[默认按数据库默认方式排序]
	 * @param $group 		分组方式	[默认为空]
	 * @return array/null	数据查询结果集,如果不存在，则返回空
	 */
	public function get_one($data, $table, $where = '', $limit='' ,$order = '', $group = '') {
		$where = $where == '' ? '' : ' WHERE '.$where;
        $limit = $limit == '' ? '' : ' LIMIT '.$limit;
		$order = $order == '' ? '' : ' ORDER BY '.$order;
		$group = $group == '' ? '' : ' GROUP BY '.$group;
		$sql = 'SELECT '.$data.' FROM '.$table.$where.$group.$order.$limit;
		$this->query($sql);
		$res = $this->fetch();
		$this->free_result();
		return $res;
	}
	
	/**
	 * 查找记录是否存在
	 * @param $data			   查询信息
	 * @param $table		   数据表
	 * @param $where		   查询条件
	 * @return boolean
	 */
	public function select_exists($data,$table,$where='') {
		$where = $where == '' ? '' : ' WHERE '.$where;
		$sql = 'SELECT '.$data.' FROM '.$table.$where;
		$this->query($sql);
		$res=$this->fetch();
		if(!empty($res))
			return true;
		else
			return false;
		$this->free_result();
	}

	/**
	 * 查看记录条数
	 * @param $table           数据表
	 * @param $where           查询条件
	 * @return
	 */
	public function select_count($table,$where) {
	    $where = $where == '' ? '' : ' WHERE '.$where;
		$sql = 'SELECT count(*) FROM '.$table.$where;
		$this->query($sql);
		$res = $this->fetch_row();
		return $res['0'];
		$this->free_result;
	}

	/**
	 * 执行添加记录操作
	 * @param $data 		要增加的数据，参数为数组。数组key为字段值，数组值为数据取值
	 * @param $table 		数据表
	 * @return boolean
	 */
	public function insert($data, $table, $return_insert_id = false) {
		if(!is_array( $data ) || $table == '' || count($data) == 0) {
			return false;
		}
		$fielddata = array_keys($data);
		$valuedata = array_values($data);
		
		$field = implode (',', $fielddata);
		$value = implode ('","', $valuedata);
		
		$sql = 'INSERT INTO '.$table.'('.$field.') VALUES ("'.$value.'")';
		$res = $this->query($sql);
		if($this->affected_rows()>0){
		    return true;
		} else {
		    return false;
		}
	}

	/**
	 * 执行更新记录操作
	 * @param $data 		要更新的数据内容，参数可以为数组也可以为字符串，建议数组。
	 * 						为数组时数组key为字段值，数组值为数据取值
	 * 						为字符串时[例：`name`='phpcms',`hits`=`hits`+1]。
	 *						为数组时[例: array('name'=>'phpcms','password'=>'123456')]
	 *						数组可使用array('name'=>'+=1', 'base'=>'-=1');程序会自动解析为`name` = `name` + 1, `base` = `base` - 1
	 * @param $table 		数据表
	 * @param $where 		更新数据时的条件
	 * @return boolean
	 */
	public function update($data, $table, $where = '')
	{
		if($table == '' or $where == '')
		{
			return false;
		}
        
		$where = ' WHERE '.$where;
		$field = '';
		if(is_string($data) && $data != '')
		{
			$field = $data;
		} 
		if (is_array($data) && count($data) > 0)
		{
			$fields = array();
			foreach($data as $k=>$v)
			{
				switch (substr($v, 0, 2))
				{
					case '+=':
						$v = substr($v,2);
						if (is_numeric($v))
						{
							$fields[] =$k.'='.$k.'+'.$v;
						}
						else
						{
							continue;
						}
						
						break;
					case '-=':
						$v = substr($v,2);
						if (is_numeric($v))
						{
							$fields[] =$k.'='.$k.'-'.$v;
						}
						else
						{
							continue;
						}
						break;
					default:
						$fields[] = $k.'='.'"'.$v.'"';
				}
			}
			$field = implode(',', $fields);
		}
		$sql = 'UPDATE '.$table.' SET '.$field.$where;
		return $this->query($sql);
	}


	


}

?>